package com.yehebl.orm.data.common.dao;

import java.util.Map;

import com.yehebl.orm.data.common.dto.SimplePage;
import com.yehebl.orm.data.common.xml.AQueryXmlSql;

/**
 * 查询分页的接口
 */
public interface ISimplePageDao {

	/**
	 * 总条数自动生成sql
	 * 
	 * @param sqlName     xmlSqlName
	 * @param queryXmlSql 查询条件生成sql
	 * @param page        页码，从1开始
	 * @param size        查询条数
	 * @param clazz       返回类型
	 */
	<T> SimplePage<T> findSimplePageBySqlName(String sqlName, AQueryXmlSql queryXmlSql, int page, int size,
			Class<T> clazz);

	/**
	 * 总条数自动生成sql
	 * 
	 * @param page  页码，从1开始
	 * @param size  查询条数
	 * @param clazz 返回类型
	 */
	<T> SimplePage<T> findSimplePageBySqlName(String sqlName, int page, int size, Class<T> clazz);

	/**
	 * sql查询返回分页
	 * 
	 * @param sql sql语句 ?占位符
	 * @param page 页码，从1开始
	 * @param size 询条数
	 * @param objs 参数
	 * @param clazz 返回类型
	 */
	<T> SimplePage<T> findSimplePageBySql(String sql, int page, int size, Class<T> clazz, Object... objs);

	/**
	 * 表达式查询返回分页
	 * 
	 * @param page  页码
	 * @param size  每页长度
	 * @param params 表达式查询
	 * @param clazz 返回类型
	 */
	<T> SimplePage<T> findSimplePageByMap(int page, int size, Map<String, Object> params, Class<T> clazz);

	/**
	 * sql查询返回分页
	 * 
	 * @param sql sql语句 ?占位符
	 * @param page 页码
	 * @param size 每页长度
	 * @param objs 参数
	 */
	SimplePage<Map<String, Object>> findMapSimplePageBySql(String sql, int page, int size, Object... objs);

	/**
	 * 总条数自动生成sql
	 * 
	 * @param sqlName     xmlSqlName
	 * @param queryXmlSql 查询条件生成sql
	 * @param page        页码，从1开始
	 * @param size        查询条数
	 */
	SimplePage<Map<String, Object>> findMapSimplePageBySqlName(String sqlName, AQueryXmlSql queryXmlSql,
			int page, int size);

	/**
	 * 总条数自动生成sql
	 * 
	 * @param page  页码，从1开始
	 * @param size  查询条数
	 */
	SimplePage<Map<String, Object>> findMapSimplePageBySqlName(String sqlName, int page, int size);
}
